﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using senac.ws.interfaces;
using System.Data;
using senac.util;
using senac.ws.DAO;

namespace senac.ws.negocio
{
    public class Negocio : INegocio
    {
        #region Singleton
        private static Negocio instance;

        private Negocio() { }

        public static Negocio Instance
        {
            get 
            {
                if (instance == null)
                    instance = new Negocio();

                return instance;
            }
        }
        #endregion

        public void AnalisarTabelas()
        {
            DataTable dtTurmasOk = null;

            try
            {
                #region Realizando consulta no WebService
                wsMira.wsMira api = new wsMira.wsMira();
                
                DataSet dsTurmas = api.pesquisaDadosDeTurmasParaPublicarNaInternet();
                DataView dvTurmas = new DataView(dsTurmas.Tables[0]);
                dtTurmasOk = dvTurmas.ToTable();
                #endregion
            }
            catch (Exception exc)
            {
                string erro = exc.Message + " -- InnerException: " + exc.InnerException;
                Util.Instance.EscreverLog(Util.opcoesEscrita.EscreverExcecao, erro);
            }

            if (dtTurmasOk == null)
                Util.Instance.EscreverLog(Util.opcoesEscrita.EscreverMensagem, "Tabela: Null");
            else
            {
                Util.Instance.EscreverLog(Util.opcoesEscrita.EscreverMensagem, "Total de Registros Base Mira: " + dtTurmasOk.Rows.Count.ToString());

                try
                {
                    //Verificando a existência da tabela no banco de dados local
                    BaseDeDados.Instance.VerificarTabelaNoBanco();

                    //Criando a tabela no banco local e retornando o nome de todas as colunas da tabela
                    List<string> listColunas = BaseDeDados.Instance.CriarTabela(dtTurmasOk);

                    //Inserindo os registros na tabela criada no banco local
                    BaseDeDados.Instance.PopularTabela(listColunas, dtTurmasOk);
                }
                catch (Exception exc)
                {
                    string erro = exc.Message + " -- InnerException: " + exc.InnerException;
                    Util.Instance.EscreverLog(Util.opcoesEscrita.EscreverExcecao, erro);
                }
            }

            Util.Instance.EscreverLog(Util.opcoesEscrita.EscreverMensagem, "FIM -----------------------------------------------------");
        }

    }
}
